const fs = require('fs');
const path = require('path');
const readline = require('readline');
//注意：此脚本是在3.5.13基础上操作的，如果是其他版本，可以按脚本的思路找到对应文件做出改变 @vue/reactivity@3.5.13

function changePackageJsonTypeToModule(path) { 
  // 检查 package.json 文件是否存在
  if (fs.existsSync(path)) {
    // 读取 package.json 文件
    const packageJson = require(path);

    // 检查是否已经存在 "type": "module"，如果不存在则添加
    if (!packageJson.type || packageJson.type !== 'module') {
      packageJson.type = 'module';

      // 将修改后的内容写回 package.json 文件
      fs.writeFileSync(path, JSON.stringify(packageJson, null, 2));
      console.log('"type": "module" has been added to package.json');
    } else {
      console.log('"type": "module" already exists in package.json');
    }
  } else {
    console.log('package.json does not exist in the target directory');
  }
}

function writeProcessEnvDefine(){
    let targetDir = path.resolve(__dirname, '../assets/plugins');
    let targetPath = path.join(targetDir, 'node_env_define.js');
    if (!fs.existsSync(targetPath)) {

        fs.mkdir(targetDir, { recursive: true }, (err) => {
            if (err) {
                return console.error('创建文件夹时出错:'+targetDir, err);
            }
        });
        // 读取 package.json 文件
        let code = `
globalThis.process = globalThis.process || {};
process.env = process.env || {};
process.env.NODE_ENV = 'production';
        `
        fs.writeFileSync(targetPath, code);
      }
}


//npm install @vue/reactivity@3.5.13
// 定义目标目录
const reactivityTargetDir = path.resolve(__dirname, '../node_modules', '@vue', 'reactivity');
const reactivityPackageJsonPath = path.join(reactivityTargetDir, 'package.json');

// 调用函数
changePackageJsonTypeToModule(reactivityPackageJsonPath);

const shareTargetDir = path.join(__dirname, '../node_modules', '@vue', 'shared');
const sharePackageJsonPath = path.join(shareTargetDir, 'package.json');
changePackageJsonTypeToModule(sharePackageJsonPath);

// 写入 process.env.NODE_ENV = 'production' 到 node_modules/@vue/reactivity/node_env_define.json
writeProcessEnvDefine()

//导入的shared.esm-bundler.js和reactivity.esm-bundler.js文件最前面加一句 process = window 。不然在微信小游戏工具里用systemjs加载时，找不到process变量
function fileAddProcessDefine(dependFilePath){
  let filePath = path.resolve(__dirname, '../node_modules',dependFilePath);
  if (!fs.existsSync(filePath)) {
      console.log("依赖文件不存在："+filePath);
      return
  }

  let addNewLine = "process = window.process"

  // 读取文件
  let data = fs.readFileSync(filePath, {
    encoding : "utf-8"
  });
  // 获取第一行内容
  const firstLine = data.split('\n')[0];
  console.log('第一行内容:', firstLine);
  if(firstLine===addNewLine){
    return
  }
  let newContent = addNewLine+"\n"+data;
  // 将修改后的内容写回文件
  fs.writeFile(filePath, newContent, 'utf8', (err) => {
    if (err) {
        console.error('写入文件失败:', err);
        return;
    }
    console.log(`${filePath} 写入内容成功：`+addNewLine);
  });
   
}

fileAddProcessDefine("@vue/reactivity/dist/reactivity.esm-bundler.js")
fileAddProcessDefine("@vue/shared/dist/shared.esm-bundler.js")